﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VSSTQH.DataAccess;

namespace VSSTQH
{
    public partial class FrmChangePassword : Form
    {
        #region Singleton Members
        private static volatile FrmChangePassword instance;
        private static object syncRoot = new Object();

        public static FrmChangePassword Instance
        {
            get
            {

                lock (syncRoot)
                {
                    if (instance == null)
                    {
                        instance = new FrmChangePassword();
                    }
                }

                return instance;
            }
        }
        #endregion

        #region Field Members
        private IUserDAO _dataAccess = new UserDAO();
        #endregion

        #region Ctors
        public FrmChangePassword()
        {
            InitializeComponent();

            Initialize();
        }
        #endregion

        #region Methods
        private void ValidatingControls()
        {
            this.edtOldPassword.Validating += new CancelEventHandler(delegate
            {
                if (String.IsNullOrEmpty(this.edtOldPassword.Text))
                {
                    errorProvider.SetError(this.edtOldPassword, "Bạn phải nhập mật khẩu cũ.");
                }
                else if (Encrypt.Encode("MD5", this.edtOldPassword.Text) != Common.UserLogin.Password)
                {
                    errorProvider.SetError(this.edtOldPassword, "Bạn nhập sai mật khẩu cũ.");
                }
                else
                {
                    errorProvider.SetError(this.edtOldPassword, String.Empty);
                }
            });

            this.edtNewPassword.Validating += new CancelEventHandler(delegate
            {
                if (String.IsNullOrEmpty(this.edtNewPassword.Text))
                {
                    errorProvider.SetError(this.edtNewPassword, "Bạn phải nhập mật khẩu mới.");
                }
                else if (this.edtNewPassword.TextLength < 6 || this.edtNewPassword.Text == this.edtOldPassword.Text)
                {
                    errorProvider.SetError(this.edtNewPassword, "Mật khẩu phải có chiều dài ít nhất 6 ký tự.\nVà phải khác với mật khẩu cũ");
                }
                else 
                {
                    errorProvider.SetError(this.edtNewPassword, String.Empty);
                }
            });

            this.edtConfirmPassword.Validating += new CancelEventHandler(delegate
            {
                if (this.edtNewPassword.Text != this.edtConfirmPassword.Text)
                {
                    errorProvider.SetError(this.edtConfirmPassword, "Mật khẩu nhập lại phải giống mật khẩu mới.");
                }
                else
                {
                    errorProvider.SetError(this.edtConfirmPassword, String.Empty);
                }
            });

        }
        private void Initialize()
        {
            this.MaximizeBox = false;
            this.Size = new Size(480, 320);

            this.Load += new EventHandler(delegate
            {
                ValidatingControls();
            });
            this.btnChangePassword.Click += new EventHandler(delegate { ClickButtonChangePassword(); });
            this.btnClose.Click += new EventHandler(delegate
            {
                instance = null;
                this.Close();
            });
        }

        private void ClickButtonChangePassword()
        {
            bool invalidInput = false;

            foreach (Control ctrl in this.panel2.Controls)
            {
                if (errorProvider.GetError(ctrl) != String.Empty)
                {
                    invalidInput = true;
                    break;
                }
            }

            if (invalidInput)
            {
                Common.ShowAlert("Bạn vẫn chưa nhập hợp lệ.");
            }
            else
            {
                this.errorProvider.Clear();

                Common.UserLogin.Password = Encrypt.Encode("MD5", this.edtNewPassword.Text);
                _dataAccess.Edit(Common.UserLogin);
                Common.ShowSuccessful("Thay đổi mật khẩu thành công!");
            }
        }
        #endregion
    }
}
